//package org.example.websockettest.Controller;
//
//import org.example.websockettest.dao.User;
//import org.example.websockettest.param.DataMessage;
//import org.example.websockettest.service.impl.RedisServiceImpl;
//import org.example.websockettest.service.impl.UserServiceImpl;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.ResponseEntity;
//import org.springframework.messaging.handler.annotation.MessageMapping;
//import org.springframework.messaging.handler.annotation.SendTo;
//import org.springframework.messaging.simp.SimpMessagingTemplate;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.bind.annotation.RestController;
//
//@RestController
//@RequestMapping("/websocket")
//public class WebSocketRestController {
//    private static final Logger logger = LoggerFactory.getLogger(WebSocketRestController.class);
//
//    @Autowired
//    private UserServiceImpl userService;
//
//    @Autowired
//    private RedisServiceImpl redisService;
//
//    private final SimpMessagingTemplate messagingTemplate;
//
//    @Autowired
//    public WebSocketRestController(SimpMessagingTemplate messagingTemplate) {
//        this.messagingTemplate = messagingTemplate;
//    }
//
//    @MessageMapping("/notify")
//    @SendTo("/topic/UserLineIn")
//    public String notifyUser(@RequestBody DataMessage message) {
//        String username = message.getSender();
//        String action = message.getBody();  // 'connect' or 'disconnect'
//        if ("connect".equalsIgnoreCase(action)) {
//            redisService.incrementOnlineUsers();
//            redisService.setUserOnline(username);
//            userService.updateUserOnlineStatus(username, true);
//            logger.info("{} 上线了, 当前在线人数: {}", username, redisService.getOnlineUsersCount());
//            return username + " 上线了";
//        } else if ("disconnect".equalsIgnoreCase(action)) {
//            redisService.decrementOnlineUsers();
//            redisService.setUserOffline(username);
//            userService.updateUserOnlineStatus(username, false);
//            logger.info("{} 下线了, 当前在线人数: {}", username, redisService.getOnlineUsersCount());
//            return username + " 下线了";
//        }
//        return "";
//    }
//
//    @MessageMapping("/notify-off")
//    @SendTo("/topic/UserLineOff")
//    public String notifyUserOffline(@RequestBody String username) {
//        User user = userService.findUserByUsername(username);
//        if (user != null) {
//            redisService.decrementOnlineUsers();
//            redisService.setUserOffline(username);
//            userService.updateUserOnlineStatus(username, false);
//            String message = username + " 已下线";
//            messagingTemplate.convertAndSend("/topic/onlineUsers", message);
//            logger.info("{} 已下线, 当前在线人数: {}", username, redisService.getOnlineUsersCount());
//            return message;
//        }
//        return "";
//    }
//
//    @GetMapping("/online-count")
//    public Integer getOnlineCount() {
//        logger.info("当前在线人数: {}", redisService.getOnlineUsersCount());
//        return redisService.getOnlineUsersCount();
//    }
//
//    @PostMapping("/broadcast")
//    public ResponseEntity<String> broadcastMessage(@RequestParam String message) {
//        if (message == null || message.isEmpty()) {
//            return ResponseEntity.badRequest().body("消息不能为空");
//        }
//        messagingTemplate.convertAndSend("/topic/broadcast", message);
//        return ResponseEntity.ok("广播消息: " + message);
//    }
//}
